// TS中的接口,就可以用来描述复杂数据类型. 而且在TS中接口主要用来描述对象. 当然数组也是复杂数据类型,也可以用接口描述,但是我们一般不用接口描述数组.

//定义接口
// 注意: 接口名称理论上随便写,但是一般要遵循规范,首字母大写,并且以I开头
// interface Iperson {
//   name: string
//   age: number
// }

// let zs: Iperson = {
//   name: 'zs',
//   //   age: 20, // 接口中定义的属性不写也不行
//   //   sex: 'male', // 接口中没有定义的属性不能写
// }

// 可选属性
// interface Iperson {
//   name: string
//   age?: number // age是可选属性
// }

// let zs: Iperson = {
//   name: 'zs',
//   //   age: 12,
// }

// 任意属性
interface Iperson {
  name: string
  age?: number // age是可选属性
  [xxx: string]: string | number //任意属性
  // 注意:如果接口中有任意属性,则其他属性的数据类型,就应该是任意属性的值的数据类型的子类型
  readonly id: string //只读
}

let zs: Iperson = {
  name: 'zs',
  age: 12,
  score: 100,
  id: 'abc',
}

zs.id = '123'
